home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
ippon
/
ippon08
/
roll.c
next >
Wrap
C/C++ Source or Header
|
1994-09-20
|
4KB
|
171 lines
/**********************************************************
ë±ô]âïü[â`âôü@âAâïâSâèâYâÇò╥ by Makken
**********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <egb.h>
#include <snd.h>
#include <dos.h>
/**********************************************************
âRâvâìâZâbâTû│é╡é╠ï@Äφé┼éαô«ì∞ë┬ö\é╔é╖éΘé╜é▀é╠ÉΘî╛
**********************************************************/
#pragma Off(387)
#pragma Off(Floating_point)
#pragma Off(486)
/*
âpâbâhô╟é▌ĵéΦùpé╠ÆΦÉö
*/
#define UP 0xfe
#define DOWN 0xfd
#define LEFT 0xfb
#define RIGHT 0xf7
#define TRIGA 0xef
#define TRIGB 0xdf
#define RUN 0xbf
#define SELECT 0x7f
#define MIN(X,Y) ((X)<=(Y)?(X):(Y))
/**********************************************************
ò`ëµëµû╩é╠æσé½é│
**********************************************************/
#define DispX 320
#define DispY 240
char gwk[1536];
char Head[512];
short Map[256*256];
short CT[256],ST[256];
/**********************************************************
ë±ô]âïü[â`âô
**********************************************************/
void roll(char deg) {
short dx,dy,sx,sy,tx,ty;
int x,y;
_Far short *VRAM;
_FP_SEG(VRAM)=0x0104;
_FP_OFF(VRAM)=0;
dx=CT[(-deg)&0xff]; dy=ST[(-deg)&0xff];
sx=(DispX/2<<8)+dx*(-DispX/2)-dy*(-DispY/2);
sy=(DispY/2<<8)+dy*(-DispX/2)+dx*(-DispY/2);
tx=sx; ty=sy;
for (y=0; y<DispY; y++) {
for (x=0; x<DispX; x++) {
*VRAM++=Map[(sy&0xff00)+(sx>>8&0xff)];
sx+=dx; sy+=dy;
}
VRAM+=512-DispX;
tx=tx-dy; ty=ty+dx;
sx=tx; sy=ty;
}
}
/**********************************************************
âüâCâôâïü[â`âô
**********************************************************/
void main(int argc, char *argv[]) {
int i,j;
int TiffX,TiffY;
FILE *fp;
char deg=0;
int pad;
/********************************************
TIFFâtâ@âCâïé╠ô╟é▌ì₧é▌
********************************************/
if (argc!=2) {
puts("run386 roll -----.tif");
exit(1);
}
if ((fp=fopen(argv[1],"rb"))==NULL) {
puts("TIFFâtâ@âCâïé¬âIü[âvâôé┼é½é▄é╣é±");
exit(1);
}
fread(Head,1,512,fp);
/* TIFFâwâbâ_é╠ë≡ô╟ */
if (*(int *)(Head+0x00)!=0x002a4949 ||
*(int *)(Head+0x36)!=16 ||
*(int *)(Head+0x42)!=1) {
puts("32768ÉFé╠ö±ê│ÅkTIFFâtâ@âCâïé≡ÄwÆΦé╡é─é¡é╛é│éó");
exit(1);
}
TiffX=*(int *)(Head+0x1e);
TiffY=*(int *)(Head+0x2a);
/* Map[]é╔TIFFëµæ£é≡ô╟é▌ì₧é▐ */
if (TiffX<256) {
for (i=0; i<MIN(256,TiffY); i++) {
fread(&Map[i<<8],2,TiffX,fp);
for (j=TiffX; j<256; j++) Map[(i<<8)+j]=0;
}
} else {
for (i=0; i<MIN(256,TiffY); i++) {
fread(&Map[i<<8],2,256,fp);
fseek(fp,(TiffX-256)*2,SEEK_CUR);
}
}
while (i<256) {
for (j=0; j<256; j++) Map[(i<<8)+j]=0;
i++;
}
fclose(fp);
/********************************************
ëµû╩É▌ÆΦ
********************************************/
EGB_resolution(gwk, 0, 10);
EGB_resolution(gwk, 1, 3);
EGB_displayPage(gwk, 1, 3);
EGB_writePage(gwk,1);
EGB_color(gwk,1,0); EGB_clearScreen(gwk);
EGB_writePage(gwk,0);
EGB_displayStart(gwk,0,0,0); EGB_displayStart(gwk,1,0,0);
EGB_displayStart(gwk,2,2,2); EGB_displayStart(gwk,3,320,240);
EGB_color(gwk,1,0); EGB_clearScreen(gwk);
/********************************************
COS,SINé╠âeü[âuâïé≡ì∞ɼ
********************************************/
for (i=0; i<256; i++) {
CT[i]=cos((float)i*_PI/128)*256;
ST[i]=sin((float)i*_PI/128)*256;
}
/********************************************
Åëè·ëµû╩ò\Ī
********************************************/
roll(0);
/********************************************
âpâbâhæÇì∞é┼ëµû╩é≡ë±ô]
********************************************/
while (1) {
SND_joy_in_2(0,&pad);
if ((pad&0xff)==SELECT) break;
switch (pad&0xff) {
case RIGHT:
deg++;
break;
case LEFT:
deg--;
break;
case UP:
deg+=4;
break;
case DOWN:
deg-=4;
break;
case TRIGA:
deg+=64;
break;
case TRIGB:
deg-=64;
break;
}
if ((pad&0xff)!=0xff) roll(deg);
}
}